﻿2026-05-16T06:07:20.8630036Z ##[group]Run pnpm --filter @rebno/client test:e2e
2026-05-16T06:07:20.8630682Z [36;1mpnpm --filter @rebno/client test:e2e[0m
2026-05-16T06:07:21.2503522Z shell: /usr/bin/bash -e {0}
2026-05-16T06:07:21.2503840Z env:
2026-05-16T06:07:21.2504132Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-16T06:07:21.2504528Z   STAGING_URL: https://staging.rebno.decidel.com
2026-05-16T06:07:21.2505182Z   STAGING_INVITE_TOKEN: ***
2026-05-16T06:07:21.2505695Z   UAT_ACCOUNT_A: ***
2026-05-16T06:07:21.2506047Z   UAT_PASSWORD_A: ***
2026-05-16T06:07:21.2506336Z   UAT_ACCOUNT_B: ***
2026-05-16T06:07:21.2506658Z   UAT_PASSWORD_B: ***
2026-05-16T06:07:21.2506938Z ##[endgroup]
2026-05-16T06:07:21.5607881Z 
2026-05-16T06:07:21.5613334Z > @rebno/client@0.1.0 test:e2e /home/runner/work/rebno/rebno/apps/client
2026-05-16T06:07:21.5614231Z > playwright test
2026-05-16T06:07:21.5614790Z 
2026-05-16T06:07:23.0355135Z 
2026-05-16T06:07:23.0356091Z Running 37 tests using 1 worker
2026-05-16T06:07:23.0356985Z 
2026-05-16T06:07:34.2530180Z   ✘   1 [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) (9.8s)
2026-05-16T06:07:44.5954354Z   ✘   2 [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) (retry #1) (9.1s)
2026-05-16T06:08:03.6944331Z   ✘   3 [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) (16.7s)
2026-05-16T06:08:20.5998871Z   ✘   4 [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) (retry #1) (14.6s)
2026-05-16T06:08:30.4554422Z   ✘   5 [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) (8.6s)
2026-05-16T06:08:39.5614172Z   ✘   6 [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) (retry #1) (7.9s)
2026-05-16T06:08:49.7614008Z   ✓   7 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block south wall (D-62 anti-revert) (9.4s)
2026-05-16T06:08:58.2644963Z   ✓   8 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block north wall (D-62 anti-revert) (8.5s)
2026-05-16T06:09:16.3284141Z   ✘   9 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block west wall (D-62 anti-revert) (17.8s)
2026-05-16T06:09:25.5417606Z   ✓  10 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block west wall (D-62 anti-revert) (retry #1) (8.4s)
2026-05-16T06:09:33.4018990Z   ✓  11 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block east wall (D-62 anti-revert) (7.8s)
2026-05-16T06:09:59.4160810Z   ✘  12 [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) (25.0s)
2026-05-16T06:10:29.5674560Z   ✓  13 [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) (retry #1) (29.3s)
2026-05-16T06:10:57.8462065Z   ✘  14 [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:19:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene (27.2s)
2026-05-16T06:11:27.8789937Z   ✘  15 [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:19:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene (retry #1) (28.2s)
2026-05-16T06:11:37.6109406Z   ✓  16 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block south wall (8.9s)
2026-05-16T06:11:46.5824801Z   ✓  17 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block north wall (8.9s)
2026-05-16T06:11:54.5535826Z   ✓  18 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block west wall (7.9s)
2026-05-16T06:12:12.9032674Z   ✘  19 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall (18.1s)
2026-05-16T06:12:22.1034990Z   ✓  20 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall (retry #1) (8.4s)
2026-05-16T06:12:38.0461693Z   ✘  21 [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) (14.7s)
2026-05-16T06:12:56.5645505Z   ✘  22 [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) (retry #1) (16.4s)
2026-05-16T06:13:02.8205425Z   ✓  23 [chromium] › test/e2e/cli-08-nameplate-offset.e2e.test.ts:30:1 › nameplate sits above sprite top (D-45) (5.5s)
2026-05-16T06:13:48.8239966Z   ✓  24 [chromium] › test/e2e/cli-08-nameplate-stable.spec.ts:37:3 › CLI-08 D-45d nameplate stability under remote motion › constant-vx walk-right: nameplate_y flip count over 30s ≤ ceiling (Plan 06.4-12 D-45d gate) (45.9s)
2026-05-16T06:14:35.4820717Z   ✓  25 [chromium] › test/e2e/cli-08-nameplate-stable.spec.ts:125:3 › CLI-08 D-45d nameplate stability under remote motion › constant-vx walk-left (KeyA): symmetric stability — flips ≤ ceiling (locks symmetric fix) (46.6s)
2026-05-16T06:14:48.2057890Z   ✓  26 [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) (12.7s)
2026-05-16T06:14:56.0414482Z   ✘  27 [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works (7.4s)
2026-05-16T06:15:15.0658722Z   ✘  28 [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works (retry #1) (18.0s)
2026-05-16T06:15:31.8749098Z   ✘  29 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) (15.3s)
2026-05-16T06:16:00.7895285Z   ✘  30 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) (retry #1) (27.1s)
2026-05-16T06:16:18.1319263Z   ✘  31 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) (15.9s)
2026-05-16T06:16:46.9670255Z   ✘  32 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) (retry #1) (27.1s)
2026-05-16T06:17:11.7342274Z   ✘  33 [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) (22.5s)
2026-05-16T06:17:36.4752521Z   ✘  34 [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) (retry #1) (22.4s)
2026-05-16T06:17:55.7001190Z   ✘  35 [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace (17.4s)
2026-05-16T06:18:14.5633898Z   ✘  36 [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace (retry #1) (16.9s)
2026-05-16T06:18:17.2014808Z   ✓  37 [chromium] › test/e2e/login-contrast.e2e.test.ts:64:3 › LoginScene contrast › heading has ≥ 4.5:1 contrast ratio on #0A0E1A background (1.9s)
2026-05-16T06:18:18.7507906Z   ✓  38 [chromium] › test/e2e/login-contrast.e2e.test.ts:72:3 › LoginScene contrast › username label has ≥ 4.5:1 contrast ratio (1.5s)
2026-05-16T06:18:20.2874481Z   ✓  39 [chromium] › test/e2e/login-contrast.e2e.test.ts:78:3 › LoginScene contrast › password label has ≥ 4.5:1 contrast ratio (1.5s)
2026-05-16T06:18:21.8987683Z   ✓  40 [chromium] › test/e2e/login-contrast.e2e.test.ts:84:3 › LoginScene contrast › username input text has ≥ 4.5:1 contrast ratio (1.6s)
2026-05-16T06:18:23.5697752Z   ✓  41 [chromium] › test/e2e/login-contrast.e2e.test.ts:90:3 › LoginScene contrast › password input text has ≥ 4.5:1 contrast ratio (1.6s)
2026-05-16T06:18:25.2118448Z   ✓  42 [chromium] › test/e2e/login-contrast.e2e.test.ts:96:3 › LoginScene contrast › submit CTA button text has ≥ 4.5:1 contrast ratio (1.6s)
2026-05-16T06:18:26.8806460Z   ✓  43 [chromium] › test/e2e/login-contrast.e2e.test.ts:104:3 › LoginScene contrast › focused input border-color is accent #22D3EE (rgb 34,211,238) (1.6s)
2026-05-16T06:18:38.3811389Z   ✘  44 [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) (11.0s)
2026-05-16T06:18:49.8029540Z   ✘  45 [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) (retry #1) (10.2s)
2026-05-16T06:18:55.5754432Z   ✓  46 [chromium] › test/e2e/logout.e2e.test.ts:51:3 › Esc menu › canvas click opens menu (D-24 secondary trigger) (5.0s)
2026-05-16T06:19:01.1523864Z   ✓  47 [chromium] › test/e2e/logout.e2e.test.ts:69:3 › Esc menu › Resume closes menu and re-engages movement without navigating (5.5s)
2026-05-16T06:19:06.9988695Z   ✘  48 [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop (5.5s)
2026-05-16T06:19:26.0332502Z   ✘  49 [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop (retry #1) (18.0s)
2026-05-16T06:19:31.9453997Z   ✓  50 [chromium] › test/e2e/sprite-state.e2e.test.ts:48:3 › sprite-state machine (D-35) + nametag (D-27a) › nameplate DOM mirror is visible for self (count >= 1) (5.1s)
2026-05-16T06:19:36.0201101Z   ✓  51 [chromium] › test/e2e/sprite-state.e2e.test.ts:61:3 › sprite-state machine (D-35) + nametag (D-27a) › nameplate text content matches logged-in username (4.0s)
2026-05-16T06:19:45.2484752Z   ✓  52 [chromium] › test/e2e/ws-kill-reconnect.e2e.test.ts:16:1 › WS-kill: login → kill WS → SDK reconnects within grace → canvas still truthy + chat round-trips (9.2s)
2026-05-16T06:19:45.3061447Z 
2026-05-16T06:19:45.3070469Z 
2026-05-16T06:19:45.3090574Z   1) [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) 
2026-05-16T06:19:45.3092048Z 
2026-05-16T06:19:45.3092707Z     Error: Camera did not pan: before=(120,160) after=(120,160)
2026-05-16T06:19:45.3093439Z 
2026-05-16T06:19:45.3094460Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3096385Z 
2026-05-16T06:19:45.3096900Z     Expected: >= [32m8[39m
2026-05-16T06:19:45.3097605Z     Received:    [31m0[39m
2026-05-16T06:19:45.3098063Z 
2026-05-16T06:19:45.3098403Z       80 |     cameraDelta,
2026-05-16T06:19:45.3099521Z       81 |     `Camera did not pan: before=(${before.scrollX},${before.scrollY}) after=(${after.scrollX},${after.scrollY})`,
2026-05-16T06:19:45.3100670Z     > 82 |   ).toBeGreaterThanOrEqual(8);
2026-05-16T06:19:45.3101334Z          |     ^
2026-05-16T06:19:45.3102048Z       83 |
2026-05-16T06:19:45.3102841Z       84 |   // 8. Secondary: player moved (position changed on at least one axis).
2026-05-16T06:19:45.3103917Z       85 |   const playerMoved = after.x !== before.x || after.y !== before.y;
2026-05-16T06:19:45.3105097Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/camera-follow.e2e.test.ts:82:5
2026-05-16T06:19:45.3106333Z 
2026-05-16T06:19:45.3107290Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3108738Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/test-failed-1.png
2026-05-16T06:19:45.3110277Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3110969Z 
2026-05-16T06:19:45.3112137Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3113546Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/video.webm
2026-05-16T06:19:45.3115074Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3115752Z 
2026-05-16T06:19:45.3116675Z     Error Context: test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/error-context.md
2026-05-16T06:19:45.3117701Z 
2026-05-16T06:19:45.3118911Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3120299Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/trace.zip
2026-05-16T06:19:45.3121348Z     Usage:
2026-05-16T06:19:45.3121723Z 
2026-05-16T06:19:45.3123285Z         pnpm exec playwright show-trace test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/trace.zip
2026-05-16T06:19:45.3124587Z 
2026-05-16T06:19:45.3125338Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3125949Z 
2026-05-16T06:19:45.3131359Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3132221Z 
2026-05-16T06:19:45.3132566Z     Error: Camera did not pan: before=(120,160) after=(120,160)
2026-05-16T06:19:45.3133574Z 
2026-05-16T06:19:45.3134344Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3134982Z 
2026-05-16T06:19:45.3135219Z     Expected: >= [32m8[39m
2026-05-16T06:19:45.3135634Z     Received:    [31m0[39m
2026-05-16T06:19:45.3135863Z 
2026-05-16T06:19:45.3136003Z       80 |     cameraDelta,
2026-05-16T06:19:45.3136858Z       81 |     `Camera did not pan: before=(${before.scrollX},${before.scrollY}) after=(${after.scrollX},${after.scrollY})`,
2026-05-16T06:19:45.3137698Z     > 82 |   ).toBeGreaterThanOrEqual(8);
2026-05-16T06:19:45.3138084Z          |     ^
2026-05-16T06:19:45.3138368Z       83 |
2026-05-16T06:19:45.3138904Z       84 |   // 8. Secondary: player moved (position changed on at least one axis).
2026-05-16T06:19:45.3139685Z       85 |   const playerMoved = after.x !== before.x || after.y !== before.y;
2026-05-16T06:19:45.3140572Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/camera-follow.e2e.test.ts:82:5
2026-05-16T06:19:45.3141095Z 
2026-05-16T06:19:45.3142434Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3143689Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3145007Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3145462Z 
2026-05-16T06:19:45.3146077Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3147191Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/video.webm
2026-05-16T06:19:45.3148479Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3148923Z 
2026-05-16T06:19:45.3149684Z     Error Context: test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/error-context.md
2026-05-16T06:19:45.3150474Z 
2026-05-16T06:19:45.3154421Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3155645Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/trace.zip
2026-05-16T06:19:45.3156495Z     Usage:
2026-05-16T06:19:45.3156688Z 
2026-05-16T06:19:45.3157546Z         pnpm exec playwright show-trace test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/trace.zip
2026-05-16T06:19:45.3158443Z 
2026-05-16T06:19:45.3159098Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3159562Z 
2026-05-16T06:19:45.3160647Z   2) [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) 
2026-05-16T06:19:45.3161472Z 
2026-05-16T06:19:45.3165091Z     Error: Expected ≥3 distinct frame keys during 1s hold; observed 1 (samples=0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000)
2026-05-16T06:19:45.3167852Z 
2026-05-16T06:19:45.3168660Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3169316Z 
2026-05-16T06:19:45.3169556Z     Expected: >= [32m3[39m
2026-05-16T06:19:45.3169994Z     Received:    [31m1[39m
2026-05-16T06:19:45.3170214Z 
2026-05-16T06:19:45.3170354Z       67 |     unique.size,
2026-05-16T06:19:45.3171372Z       68 |     `Expected ≥3 distinct frame keys during 1s hold; observed ${unique.size} (samples=${samples.join(',')})`,
2026-05-16T06:19:45.3172868Z     > 69 |   ).toBeGreaterThanOrEqual(3);
2026-05-16T06:19:45.3173664Z          |     ^
2026-05-16T06:19:45.3173986Z       70 |
2026-05-16T06:19:45.3174523Z       71 |   // 4. Each observed frame must match a NaviRun* pattern (sanity).
2026-05-16T06:19:45.3175182Z       72 |   for (const f of unique) {
2026-05-16T06:19:45.3175927Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-anim.e2e.test.ts:69:5
2026-05-16T06:19:45.3176467Z 
2026-05-16T06:19:45.3177181Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3178399Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-16T06:19:45.3179683Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3180171Z 
2026-05-16T06:19:45.3180814Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3182196Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/video.webm
2026-05-16T06:19:45.3183816Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3184286Z 
2026-05-16T06:19:45.3185064Z     Error Context: test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-16T06:19:45.3185873Z 
2026-05-16T06:19:45.3186556Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3187715Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T06:19:45.3188510Z     Usage:
2026-05-16T06:19:45.3188692Z 
2026-05-16T06:19:45.3189513Z         pnpm exec playwright show-trace test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T06:19:45.3190381Z 
2026-05-16T06:19:45.3190996Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3191524Z 
2026-05-16T06:19:45.3192515Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3193011Z 
2026-05-16T06:19:45.3196337Z     Error: Expected ≥3 distinct frame keys during 1s hold; observed 1 (samples=0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000)
2026-05-16T06:19:45.3198967Z 
2026-05-16T06:19:45.3199778Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3200445Z 
2026-05-16T06:19:45.3200671Z     Expected: >= [32m3[39m
2026-05-16T06:19:45.3201124Z     Received:    [31m1[39m
2026-05-16T06:19:45.3201644Z 
2026-05-16T06:19:45.3201982Z       67 |     unique.size,
2026-05-16T06:19:45.3203036Z       68 |     `Expected ≥3 distinct frame keys during 1s hold; observed ${unique.size} (samples=${samples.join(',')})`,
2026-05-16T06:19:45.3203937Z     > 69 |   ).toBeGreaterThanOrEqual(3);
2026-05-16T06:19:45.3204338Z          |     ^
2026-05-16T06:19:45.3204647Z       70 |
2026-05-16T06:19:45.3205181Z       71 |   // 4. Each observed frame must match a NaviRun* pattern (sanity).
2026-05-16T06:19:45.3205797Z       72 |   for (const f of unique) {
2026-05-16T06:19:45.3206564Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-anim.e2e.test.ts:69:5
2026-05-16T06:19:45.3207111Z 
2026-05-16T06:19:45.3207795Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3209044Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3210478Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3210984Z 
2026-05-16T06:19:45.3211652Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3213198Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-16T06:19:45.3214476Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3214937Z 
2026-05-16T06:19:45.3215716Z     Error Context: test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-16T06:19:45.3216560Z 
2026-05-16T06:19:45.3217258Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3218423Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T06:19:45.3219272Z     Usage:
2026-05-16T06:19:45.3219729Z 
2026-05-16T06:19:45.3220598Z         pnpm exec playwright show-trace test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T06:19:45.3221475Z 
2026-05-16T06:19:45.3223202Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3223682Z 
2026-05-16T06:19:45.3224761Z   3) [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) 
2026-05-16T06:19:45.3225597Z 
2026-05-16T06:19:45.3225914Z     Error: Camera scrollX did not advance: before=120 after=120
2026-05-16T06:19:45.3226340Z 
2026-05-16T06:19:45.3227013Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3227601Z 
2026-05-16T06:19:45.3227839Z     Expected: > [32m15[39m
2026-05-16T06:19:45.3228287Z     Received:   [31m0[39m
2026-05-16T06:19:45.3228842Z 
2026-05-16T06:19:45.3229132Z       83 |     (after as number) - (before as number),
2026-05-16T06:19:45.3229868Z       84 |     `Camera scrollX did not advance: before=${before} after=${after}`,
2026-05-16T06:19:45.3230969Z     > 85 |   ).toBeGreaterThan(15);
2026-05-16T06:19:45.3231387Z          |     ^
2026-05-16T06:19:45.3231697Z       86 | });
2026-05-16T06:19:45.3232126Z       87 |
2026-05-16T06:19:45.3232786Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-camera.e2e.test.ts:85:5
2026-05-16T06:19:45.3233375Z 
2026-05-16T06:19:45.3234093Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3235325Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-16T06:19:45.3236629Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3237091Z 
2026-05-16T06:19:45.3237778Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3238921Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/video.webm
2026-05-16T06:19:45.3240187Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3240660Z 
2026-05-16T06:19:45.3241393Z     Error Context: test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-16T06:19:45.3242390Z 
2026-05-16T06:19:45.3243126Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3244264Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T06:19:45.3245033Z     Usage:
2026-05-16T06:19:45.3245206Z 
2026-05-16T06:19:45.3246002Z         pnpm exec playwright show-trace test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T06:19:45.3247123Z 
2026-05-16T06:19:45.3247767Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3248221Z 
2026-05-16T06:19:45.3248773Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3249188Z 
2026-05-16T06:19:45.3249494Z     Error: Camera scrollX did not advance: before=120 after=120
2026-05-16T06:19:45.3249909Z 
2026-05-16T06:19:45.3250579Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3251145Z 
2026-05-16T06:19:45.3251364Z     Expected: > [32m15[39m
2026-05-16T06:19:45.3252113Z     Received:   [31m0[39m
2026-05-16T06:19:45.3252373Z 
2026-05-16T06:19:45.3252623Z       83 |     (after as number) - (before as number),
2026-05-16T06:19:45.3253333Z       84 |     `Camera scrollX did not advance: before=${before} after=${after}`,
2026-05-16T06:19:45.3254235Z     > 85 |   ).toBeGreaterThan(15);
2026-05-16T06:19:45.3254655Z          |     ^
2026-05-16T06:19:45.3254970Z       86 | });
2026-05-16T06:19:45.3255268Z       87 |
2026-05-16T06:19:45.3255942Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-camera.e2e.test.ts:85:5
2026-05-16T06:19:45.3256516Z 
2026-05-16T06:19:45.3257240Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3258417Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3259633Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3260090Z 
2026-05-16T06:19:45.3260741Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3262103Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-16T06:19:45.3263460Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3264187Z 
2026-05-16T06:19:45.3264981Z     Error Context: test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-16T06:19:45.3265809Z 
2026-05-16T06:19:45.3266503Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3267696Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T06:19:45.3268473Z     Usage:
2026-05-16T06:19:45.3268654Z 
2026-05-16T06:19:45.3269513Z         pnpm exec playwright show-trace test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T06:19:45.3270373Z 
2026-05-16T06:19:45.3271003Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3271482Z 
2026-05-16T06:19:45.3273098Z   4) [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:19:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene 
2026-05-16T06:19:45.3274215Z 
2026-05-16T06:19:45.3274807Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3275327Z 
2026-05-16T06:19:45.3275533Z     Locator: locator('#username')
2026-05-16T06:19:45.3275944Z     Expected: visible
2026-05-16T06:19:45.3276304Z     Timeout: 15000ms
2026-05-16T06:19:45.3276685Z     Error: element(s) not found
2026-05-16T06:19:45.3276947Z 
2026-05-16T06:19:45.3277075Z     Call log:
2026-05-16T06:19:45.3277642Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T06:19:45.3278298Z     [2m  - waiting for locator('#username')[22m
2026-05-16T06:19:45.3278619Z 
2026-05-16T06:19:45.3278629Z 
2026-05-16T06:19:45.3279154Z       45 |       // SOURCE: GameScene.ts onForceReset transitions to LoginScene with an eviction banner.
2026-05-16T06:19:45.3280458Z       46 |       // The force_reset s2c event causes A1 to leave the room and start LoginScene.
2026-05-16T06:19:45.3281393Z     > 47 |       await expect(pageA1.locator('#username')).toBeVisible({ timeout: 15_000 });
2026-05-16T06:19:45.3282349Z          |                                                 ^
2026-05-16T06:19:45.3282780Z       48 |
2026-05-16T06:19:45.3283179Z       49 |       // [int->REQ-SRV-03] [int->REQ-CLI-08]
2026-05-16T06:19:45.3283861Z       50 |       // D-51c cycle-5 no-banner-loop assertion (Plan 06.4-09). Sample
2026-05-16T06:19:45.3284818Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-dup-login.e2e.test.ts:47:49
2026-05-16T06:19:45.3285394Z 
2026-05-16T06:19:45.3286103Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3287293Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/test-failed-1.png
2026-05-16T06:19:45.3288613Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3289054Z 
2026-05-16T06:19:45.3289715Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3290898Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/test-failed-2.png
2026-05-16T06:19:45.3292537Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3292989Z 
2026-05-16T06:19:45.3293693Z     Error Context: test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/error-context.md
2026-05-16T06:19:45.3294439Z 
2026-05-16T06:19:45.3295082Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3296169Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/trace.zip
2026-05-16T06:19:45.3297220Z     Usage:
2026-05-16T06:19:45.3297391Z 
2026-05-16T06:19:45.3298182Z         pnpm exec playwright show-trace test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/trace.zip
2026-05-16T06:19:45.3298998Z 
2026-05-16T06:19:45.3299581Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3300031Z 
2026-05-16T06:19:45.3300598Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3301072Z 
2026-05-16T06:19:45.3301656Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3302350Z 
2026-05-16T06:19:45.3302536Z     Locator: locator('#username')
2026-05-16T06:19:45.3302933Z     Expected: visible
2026-05-16T06:19:45.3303275Z     Timeout: 15000ms
2026-05-16T06:19:45.3303646Z     Error: element(s) not found
2026-05-16T06:19:45.3303896Z 
2026-05-16T06:19:45.3304247Z     Call log:
2026-05-16T06:19:45.3304787Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T06:19:45.3305453Z     [2m  - waiting for locator('#username')[22m
2026-05-16T06:19:45.3305806Z 
2026-05-16T06:19:45.3305821Z 
2026-05-16T06:19:45.3306355Z       45 |       // SOURCE: GameScene.ts onForceReset transitions to LoginScene with an eviction banner.
2026-05-16T06:19:45.3307371Z       46 |       // The force_reset s2c event causes A1 to leave the room and start LoginScene.
2026-05-16T06:19:45.3308306Z     > 47 |       await expect(pageA1.locator('#username')).toBeVisible({ timeout: 15_000 });
2026-05-16T06:19:45.3309046Z          |                                                 ^
2026-05-16T06:19:45.3309473Z       48 |
2026-05-16T06:19:45.3309874Z       49 |       // [int->REQ-SRV-03] [int->REQ-CLI-08]
2026-05-16T06:19:45.3310543Z       50 |       // D-51c cycle-5 no-banner-loop assertion (Plan 06.4-09). Sample
2026-05-16T06:19:45.3311476Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-dup-login.e2e.test.ts:47:49
2026-05-16T06:19:45.3312409Z 
2026-05-16T06:19:45.3313051Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3314268Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3315573Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3316013Z 
2026-05-16T06:19:45.3316642Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3317843Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/test-failed-2.png
2026-05-16T06:19:45.3319135Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3319611Z 
2026-05-16T06:19:45.3320390Z     Error Context: test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/error-context.md
2026-05-16T06:19:45.3321447Z 
2026-05-16T06:19:45.3322228Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3323399Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/trace.zip
2026-05-16T06:19:45.3324201Z     Usage:
2026-05-16T06:19:45.3324367Z 
2026-05-16T06:19:45.3325198Z         pnpm exec playwright show-trace test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/trace.zip
2026-05-16T06:19:45.3326071Z 
2026-05-16T06:19:45.3326699Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3327166Z 
2026-05-16T06:19:45.3328139Z   5) [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) 
2026-05-16T06:19:45.3328957Z 
2026-05-16T06:19:45.3333903Z     Error: D-41 regression: expected ≥3 distinct localFrame keys during 1s KeyD hold; observed 1 (samples=[0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000]). Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.
2026-05-16T06:19:45.3337352Z 
2026-05-16T06:19:45.3338089Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3338726Z 
2026-05-16T06:19:45.3338929Z     Expected: >= [32m3[39m
2026-05-16T06:19:45.3339355Z     Received:    [31m1[39m
2026-05-16T06:19:45.3339585Z 
2026-05-16T06:19:45.3339949Z       83 |       `observed ${unique.size} (samples=[${samples.join(',')}]). ` +
2026-05-16T06:19:45.3341138Z       84 |       `Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.`,
2026-05-16T06:19:45.3342115Z     > 85 |   ).toBeGreaterThanOrEqual(3);
2026-05-16T06:19:45.3342542Z          |     ^
2026-05-16T06:19:45.3342840Z       86 |
2026-05-16T06:19:45.3343630Z       87 |   // 5. At least one observed frame key must contain 'Run' — confirms we left Stand state.
2026-05-16T06:19:45.3344542Z       88 |   const hasRunFrame = [...unique].some((f) => f.includes('Run'));
2026-05-16T06:19:45.3345496Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-local-anim.e2e.test.ts:85:5
2026-05-16T06:19:45.3346087Z 
2026-05-16T06:19:45.3346738Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3347928Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/test-failed-1.png
2026-05-16T06:19:45.3349221Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3349868Z 
2026-05-16T06:19:45.3350493Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3351590Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/video.webm
2026-05-16T06:19:45.3353049Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3353512Z 
2026-05-16T06:19:45.3354241Z     Error Context: test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/error-context.md
2026-05-16T06:19:45.3355017Z 
2026-05-16T06:19:45.3355663Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3356779Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/trace.zip
2026-05-16T06:19:45.3357544Z     Usage:
2026-05-16T06:19:45.3357925Z 
2026-05-16T06:19:45.3358752Z         pnpm exec playwright show-trace test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/trace.zip
2026-05-16T06:19:45.3359601Z 
2026-05-16T06:19:45.3360185Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3360646Z 
2026-05-16T06:19:45.3361226Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3361690Z 
2026-05-16T06:19:45.3366410Z     Error: D-41 regression: expected ≥3 distinct localFrame keys during 1s KeyD hold; observed 1 (samples=[0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000]). Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.
2026-05-16T06:19:45.3369853Z 
2026-05-16T06:19:45.3370580Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3371229Z 
2026-05-16T06:19:45.3371431Z     Expected: >= [32m3[39m
2026-05-16T06:19:45.3372055Z     Received:    [31m1[39m
2026-05-16T06:19:45.3372290Z 
2026-05-16T06:19:45.3372645Z       83 |       `observed ${unique.size} (samples=[${samples.join(',')}]). ` +
2026-05-16T06:19:45.3373876Z       84 |       `Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.`,
2026-05-16T06:19:45.3374712Z     > 85 |   ).toBeGreaterThanOrEqual(3);
2026-05-16T06:19:45.3375134Z          |     ^
2026-05-16T06:19:45.3375434Z       86 |
2026-05-16T06:19:45.3376216Z       87 |   // 5. At least one observed frame key must contain 'Run' — confirms we left Stand state.
2026-05-16T06:19:45.3377138Z       88 |   const hasRunFrame = [...unique].some((f) => f.includes('Run'));
2026-05-16T06:19:45.3378279Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-local-anim.e2e.test.ts:85:5
2026-05-16T06:19:45.3378806Z 
2026-05-16T06:19:45.3379428Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3380678Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3382197Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3382667Z 
2026-05-16T06:19:45.3383303Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3384505Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/video.webm
2026-05-16T06:19:45.3385823Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3386365Z 
2026-05-16T06:19:45.3387176Z     Error Context: test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/error-context.md
2026-05-16T06:19:45.3387997Z 
2026-05-16T06:19:45.3388667Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3389856Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/trace.zip
2026-05-16T06:19:45.3390782Z     Usage:
2026-05-16T06:19:45.3390977Z 
2026-05-16T06:19:45.3392055Z         pnpm exec playwright show-trace test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/trace.zip
2026-05-16T06:19:45.3392977Z 
2026-05-16T06:19:45.3393573Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3394087Z 
2026-05-16T06:19:45.3395420Z   6) [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works 
2026-05-16T06:19:45.3396845Z 
2026-05-16T06:19:45.3397566Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoContain[2m([22m[32mexpected[39m[2m) // indexOf[22m
2026-05-16T06:19:45.3398212Z 
2026-05-16T06:19:45.3398488Z     Expected value: [32m"mvp"[39m
2026-05-16T06:19:45.3399669Z     Received array: [31m["atlas-mvp", "59073070-ffd0-4c1c-9972-eb859b877fa8", "3d123d13-bca9-45f9-a3d7-595a1191be7f"][39m
2026-05-16T06:19:45.3400387Z 
2026-05-16T06:19:45.3400526Z       87 |   );
2026-05-16T06:19:45.3401143Z       88 |   // The 'mvp' atlas is loaded by BootScene on the cookie reload path (06-14).
2026-05-16T06:19:45.3401972Z     > 89 |   expect(loadedTextures).toContain('mvp');
2026-05-16T06:19:45.3402448Z          |                          ^
2026-05-16T06:19:45.3402829Z       90 |
2026-05-16T06:19:45.3403400Z       91 |   // 5. Chat round-trip: send a message and assert the chat line appears.
2026-05-16T06:19:45.3404367Z       92 |   await page.keyboard.press('Enter');
2026-05-16T06:19:45.3405165Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-resume-render.spec.ts:89:26
2026-05-16T06:19:45.3405710Z 
2026-05-16T06:19:45.3406368Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3407530Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/test-failed-1.png
2026-05-16T06:19:45.3408748Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3409185Z 
2026-05-16T06:19:45.3409774Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3410863Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/video.webm
2026-05-16T06:19:45.3412569Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3413082Z 
2026-05-16T06:19:45.3413835Z     Error Context: test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/error-context.md
2026-05-16T06:19:45.3414911Z 
2026-05-16T06:19:45.3415603Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3416765Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/trace.zip
2026-05-16T06:19:45.3417566Z     Usage:
2026-05-16T06:19:45.3417734Z 
2026-05-16T06:19:45.3418574Z         pnpm exec playwright show-trace test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/trace.zip
2026-05-16T06:19:45.3419411Z 
2026-05-16T06:19:45.3420005Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3420498Z 
2026-05-16T06:19:45.3421104Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3422045Z 
2026-05-16T06:19:45.3422657Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3423205Z 
2026-05-16T06:19:45.3423489Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T06:19:45.3423964Z     Expected: visible
2026-05-16T06:19:45.3424582Z     Timeout: 15000ms
2026-05-16T06:19:45.3424969Z     Error: element(s) not found
2026-05-16T06:19:45.3425227Z 
2026-05-16T06:19:45.3425374Z     Call log:
2026-05-16T06:19:45.3425949Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T06:19:45.3426725Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T06:19:45.3427137Z 
2026-05-16T06:19:45.3427147Z 
2026-05-16T06:19:45.3427296Z        at fixtures.ts:172
2026-05-16T06:19:45.3427520Z 
2026-05-16T06:19:45.3427652Z       170 |  */
2026-05-16T06:19:45.3428224Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T06:19:45.3429365Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T06:19:45.3430132Z           |                                                                ^
2026-05-16T06:19:45.3430647Z       173 |     timeout: 15_000,
2026-05-16T06:19:45.3431018Z       174 |   });
2026-05-16T06:19:45.3431349Z       175 | }
2026-05-16T06:19:45.3432384Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T06:19:45.3433489Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-resume-render.spec.ts:37:9
2026-05-16T06:19:45.3434060Z 
2026-05-16T06:19:45.3434697Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3435954Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3437276Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3437747Z 
2026-05-16T06:19:45.3438370Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3439529Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/video.webm
2026-05-16T06:19:45.3440837Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3441271Z 
2026-05-16T06:19:45.3442193Z     Error Context: test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/error-context.md
2026-05-16T06:19:45.3443031Z 
2026-05-16T06:19:45.3443666Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3444837Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/trace.zip
2026-05-16T06:19:45.3445663Z     Usage:
2026-05-16T06:19:45.3446050Z 
2026-05-16T06:19:45.3446932Z         pnpm exec playwright show-trace test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/trace.zip
2026-05-16T06:19:45.3447831Z 
2026-05-16T06:19:45.3448390Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3448870Z 
2026-05-16T06:19:45.3450006Z   7) [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) 
2026-05-16T06:19:45.3450925Z 
2026-05-16T06:19:45.3452327Z     Error: Expected ≥3 firstRemoteFrame samples on B during 1s window (telemetry must publish — PlayerRenderer.onSimulationTickRemote at 30 Hz).
2026-05-16T06:19:45.3453215Z 
2026-05-16T06:19:45.3453943Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3454584Z 
2026-05-16T06:19:45.3454785Z     Expected: >= [32m3[39m
2026-05-16T06:19:45.3455423Z     Received:    [31m2[39m
2026-05-16T06:19:45.3455658Z 
2026-05-16T06:19:45.3456231Z       106 |       'Expected ≥3 firstRemoteFrame samples on B during 1s window (telemetry ' +
2026-05-16T06:19:45.3457290Z       107 |         'must publish — PlayerRenderer.onSimulationTickRemote at 30 Hz).',
2026-05-16T06:19:45.3458001Z     > 108 |     ).toBeGreaterThanOrEqual(3);
2026-05-16T06:19:45.3458431Z           |       ^
2026-05-16T06:19:45.3459076Z       109 |     const teleInSamplesB = samplesB.filter((f) => TELEPORT_FRAME_REGEX.test(f));
2026-05-16T06:19:45.3459741Z       110 |     expect(
2026-05-16T06:19:45.3460130Z       111 |       teleInSamplesB,
2026-05-16T06:19:45.3460991Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:108:7
2026-05-16T06:19:45.3461661Z 
2026-05-16T06:19:45.3462473Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3463709Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/test-failed-1.png
2026-05-16T06:19:45.3465028Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3465483Z 
2026-05-16T06:19:45.3466125Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3467312Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/test-failed-2.png
2026-05-16T06:19:45.3468597Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3469054Z 
2026-05-16T06:19:45.3469802Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/error-context.md
2026-05-16T06:19:45.3470606Z 
2026-05-16T06:19:45.3471248Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3472831Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/trace.zip
2026-05-16T06:19:45.3473652Z     Usage:
2026-05-16T06:19:45.3473828Z 
2026-05-16T06:19:45.3474655Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/trace.zip
2026-05-16T06:19:45.3475522Z 
2026-05-16T06:19:45.3476114Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3476568Z 
2026-05-16T06:19:45.3477149Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3477612Z 
2026-05-16T06:19:45.3478180Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3478708Z 
2026-05-16T06:19:45.3478971Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T06:19:45.3479464Z     Expected: visible
2026-05-16T06:19:45.3479803Z     Timeout: 15000ms
2026-05-16T06:19:45.3480199Z     Error: element(s) not found
2026-05-16T06:19:45.3480638Z 
2026-05-16T06:19:45.3480761Z     Call log:
2026-05-16T06:19:45.3481289Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T06:19:45.3482205Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T06:19:45.3482636Z 
2026-05-16T06:19:45.3482645Z 
2026-05-16T06:19:45.3482787Z        at fixtures.ts:172
2026-05-16T06:19:45.3483018Z 
2026-05-16T06:19:45.3483141Z       170 |  */
2026-05-16T06:19:45.3483717Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T06:19:45.3484636Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T06:19:45.3485419Z           |                                                                ^
2026-05-16T06:19:45.3485931Z       173 |     timeout: 15_000,
2026-05-16T06:19:45.3486302Z       174 |   });
2026-05-16T06:19:45.3486606Z       175 | }
2026-05-16T06:19:45.3487329Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T06:19:45.3488537Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:91:11
2026-05-16T06:19:45.3489193Z 
2026-05-16T06:19:45.3489861Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3491140Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3492731Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3493194Z 
2026-05-16T06:19:45.3493825Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3495078Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/test-failed-2.png
2026-05-16T06:19:45.3496422Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3497180Z 
2026-05-16T06:19:45.3497992Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/error-context.md
2026-05-16T06:19:45.3498867Z 
2026-05-16T06:19:45.3499526Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3500717Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/trace.zip
2026-05-16T06:19:45.3501453Z     Usage:
2026-05-16T06:19:45.3501623Z 
2026-05-16T06:19:45.3502638Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/trace.zip
2026-05-16T06:19:45.3503479Z 
2026-05-16T06:19:45.3504138Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3504598Z 
2026-05-16T06:19:45.3505970Z   8) [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) 
2026-05-16T06:19:45.3507344Z 
2026-05-16T06:19:45.3508907Z     Error: Expected ≥3 firstRemoteFrame samples on A during 800 ms window (telemetry must publish — PlayerRenderer.startTeleportAnim onUpdate AND onSimulationTickRemote both write the field).
2026-05-16T06:19:45.3510086Z 
2026-05-16T06:19:45.3510817Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3511448Z 
2026-05-16T06:19:45.3511679Z     Expected: >= [32m3[39m
2026-05-16T06:19:45.3512389Z     Received:    [31m2[39m
2026-05-16T06:19:45.3512629Z 
2026-05-16T06:19:45.3513330Z       186 |         '(telemetry must publish — PlayerRenderer.startTeleportAnim onUpdate ' +
2026-05-16T06:19:45.3514308Z       187 |         'AND onSimulationTickRemote both write the field).',
2026-05-16T06:19:45.3514977Z     > 188 |     ).toBeGreaterThanOrEqual(3);
2026-05-16T06:19:45.3515431Z           |       ^
2026-05-16T06:19:45.3516072Z       189 |     const teleInSamplesA = samplesA.filter((f) => TELEPORT_FRAME_REGEX.test(f));
2026-05-16T06:19:45.3516739Z       190 |     expect(
2026-05-16T06:19:45.3517144Z       191 |       teleInSamplesA.length,
2026-05-16T06:19:45.3518031Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:188:7
2026-05-16T06:19:45.3518860Z 
2026-05-16T06:19:45.3519545Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3520777Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/test-failed-1.png
2026-05-16T06:19:45.3522319Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3522782Z 
2026-05-16T06:19:45.3523411Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3524675Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/test-failed-2.png
2026-05-16T06:19:45.3525861Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3526273Z 
2026-05-16T06:19:45.3526958Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/error-context.md
2026-05-16T06:19:45.3527701Z 
2026-05-16T06:19:45.3528365Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3529534Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/trace.zip
2026-05-16T06:19:45.3530346Z     Usage:
2026-05-16T06:19:45.3530524Z 
2026-05-16T06:19:45.3531353Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/trace.zip
2026-05-16T06:19:45.3532573Z 
2026-05-16T06:19:45.3533395Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3533812Z 
2026-05-16T06:19:45.3534359Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3534796Z 
2026-05-16T06:19:45.3535357Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3535849Z 
2026-05-16T06:19:45.3536114Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T06:19:45.3536575Z     Expected: visible
2026-05-16T06:19:45.3536921Z     Timeout: 15000ms
2026-05-16T06:19:45.3537306Z     Error: element(s) not found
2026-05-16T06:19:45.3537557Z 
2026-05-16T06:19:45.3537694Z     Call log:
2026-05-16T06:19:45.3538253Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T06:19:45.3539041Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T06:19:45.3539459Z 
2026-05-16T06:19:45.3539500Z 
2026-05-16T06:19:45.3539663Z        at fixtures.ts:172
2026-05-16T06:19:45.3539895Z 
2026-05-16T06:19:45.3540019Z       170 |  */
2026-05-16T06:19:45.3540583Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T06:19:45.3541484Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T06:19:45.3542448Z           |                                                                ^
2026-05-16T06:19:45.3542963Z       173 |     timeout: 15_000,
2026-05-16T06:19:45.3543332Z       174 |   });
2026-05-16T06:19:45.3543632Z       175 | }
2026-05-16T06:19:45.3544317Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T06:19:45.3545496Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:176:11
2026-05-16T06:19:45.3546124Z 
2026-05-16T06:19:45.3546824Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3548340Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3549720Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3550178Z 
2026-05-16T06:19:45.3550813Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3552319Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/test-failed-2.png
2026-05-16T06:19:45.3553655Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3554122Z 
2026-05-16T06:19:45.3555014Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/error-context.md
2026-05-16T06:19:45.3555912Z 
2026-05-16T06:19:45.3556575Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3558014Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/trace.zip
2026-05-16T06:19:45.3558883Z     Usage:
2026-05-16T06:19:45.3559061Z 
2026-05-16T06:19:45.3559941Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/trace.zip
2026-05-16T06:19:45.3560839Z 
2026-05-16T06:19:45.3561447Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3562073Z 
2026-05-16T06:19:45.3563016Z   9) [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) 
2026-05-16T06:19:45.3564228Z 
2026-05-16T06:19:45.3565089Z     Error: RoomRenderer.renderNew must emit floor tile sprites for mvp-room (D-40 verify-bail flip / Plan 06.1-05)
2026-05-16T06:19:45.3565773Z 
2026-05-16T06:19:45.3566435Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3567027Z 
2026-05-16T06:19:45.3567227Z     Expected: > [32m0[39m
2026-05-16T06:19:45.3567640Z     Received:   [31m0[39m
2026-05-16T06:19:45.3567864Z 
2026-05-16T06:19:45.3567989Z     Call Log:
2026-05-16T06:19:45.3568465Z     - Timeout 15000ms exceeded while waiting on the predicate
2026-05-16T06:19:45.3568855Z 
2026-05-16T06:19:45.3569280Z       55 |   //    once RoomRenderer.renderNew (Plan 06.1-05) has placed at least one tile
2026-05-16T06:19:45.3570200Z       56 |   //    via group.add(). mvp-room ships 324 tiles, so any positive count clears.
2026-05-16T06:19:45.3570850Z     > 57 |   await expect
2026-05-16T06:19:45.3571223Z          |   ^
2026-05-16T06:19:45.3571526Z       58 |     .poll(
2026-05-16T06:19:45.3572133Z       59 |       async () =>
2026-05-16T06:19:45.3572545Z       60 |         page.evaluate(
2026-05-16T06:19:45.3573277Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-tiles.e2e.test.ts:57:3
2026-05-16T06:19:45.3574047Z 
2026-05-16T06:19:45.3574699Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3575896Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-16T06:19:45.3577132Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3577589Z 
2026-05-16T06:19:45.3578192Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3579265Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/video.webm
2026-05-16T06:19:45.3580444Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3580889Z 
2026-05-16T06:19:45.3581581Z     Error Context: test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-16T06:19:45.3582724Z 
2026-05-16T06:19:45.3583358Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3584475Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T06:19:45.3585232Z     Usage:
2026-05-16T06:19:45.3585409Z 
2026-05-16T06:19:45.3586196Z         pnpm exec playwright show-trace test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T06:19:45.3587007Z 
2026-05-16T06:19:45.3587586Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3588071Z 
2026-05-16T06:19:45.3588669Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3589129Z 
2026-05-16T06:19:45.3589751Z     Error: RoomRenderer.renderNew must emit floor tile sprites for mvp-room (D-40 verify-bail flip / Plan 06.1-05)
2026-05-16T06:19:45.3590480Z 
2026-05-16T06:19:45.3591104Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3591683Z 
2026-05-16T06:19:45.3592164Z     Expected: > [32m0[39m
2026-05-16T06:19:45.3592628Z     Received:   [31m0[39m
2026-05-16T06:19:45.3592859Z 
2026-05-16T06:19:45.3592985Z     Call Log:
2026-05-16T06:19:45.3593448Z     - Timeout 15000ms exceeded while waiting on the predicate
2026-05-16T06:19:45.3593842Z 
2026-05-16T06:19:45.3594269Z       55 |   //    once RoomRenderer.renderNew (Plan 06.1-05) has placed at least one tile
2026-05-16T06:19:45.3595163Z       56 |   //    via group.add(). mvp-room ships 324 tiles, so any positive count clears.
2026-05-16T06:19:45.3595777Z     > 57 |   await expect
2026-05-16T06:19:45.3596130Z          |   ^
2026-05-16T06:19:45.3596460Z       58 |     .poll(
2026-05-16T06:19:45.3596835Z       59 |       async () =>
2026-05-16T06:19:45.3597248Z       60 |         page.evaluate(
2026-05-16T06:19:45.3598165Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-tiles.e2e.test.ts:57:3
2026-05-16T06:19:45.3598698Z 
2026-05-16T06:19:45.3599351Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3600569Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3602006Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3602443Z 
2026-05-16T06:19:45.3603036Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3604139Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-16T06:19:45.3605388Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3605882Z 
2026-05-16T06:19:45.3606637Z     Error Context: test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-16T06:19:45.3607645Z 
2026-05-16T06:19:45.3608275Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3609405Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T06:19:45.3610203Z     Usage:
2026-05-16T06:19:45.3610365Z 
2026-05-16T06:19:45.3611198Z         pnpm exec playwright show-trace test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T06:19:45.3612270Z 
2026-05-16T06:19:45.3612860Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3613337Z 
2026-05-16T06:19:45.3614450Z   10) [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace 
2026-05-16T06:19:45.3615288Z 
2026-05-16T06:19:45.3615968Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3616573Z 
2026-05-16T06:19:45.3616785Z     Expected: > [32m470[39m
2026-05-16T06:19:45.3617218Z     Received:   [31m440[39m
2026-05-16T06:19:45.3617444Z 
2026-05-16T06:19:45.3617672Z       78 |       .getAttribute('data-x-coord');
2026-05-16T06:19:45.3618191Z       79 |     const afterX = Number(afterXStr ?? '0');
2026-05-16T06:19:45.3619014Z     > 80 |     expect(afterX).toBeGreaterThan(beforeX + 30); // ≥30 px movement; conservative.
2026-05-16T06:19:45.3619728Z          |                    ^
2026-05-16T06:19:45.3620083Z       81 |
2026-05-16T06:19:45.3620665Z       82 |     // (4) Chat round-trip. A presses Enter to focus chat, types, Enter to send.
2026-05-16T06:19:45.3621507Z       83 |     //     B sees a `.chat-line` matching `<sender>: <text>` within 5s.
2026-05-16T06:19:45.3622739Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08.e2e.test.ts:80:20
2026-05-16T06:19:45.3623274Z 
2026-05-16T06:19:45.3623945Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3625135Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/test-failed-1.png
2026-05-16T06:19:45.3626409Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3626871Z 
2026-05-16T06:19:45.3627499Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3628657Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/test-failed-2.png
2026-05-16T06:19:45.3629914Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3630372Z 
2026-05-16T06:19:45.3631095Z     Error Context: test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/error-context.md
2026-05-16T06:19:45.3632287Z 
2026-05-16T06:19:45.3632945Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3634054Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/trace.zip
2026-05-16T06:19:45.3634822Z     Usage:
2026-05-16T06:19:45.3634984Z 
2026-05-16T06:19:45.3635792Z         pnpm exec playwright show-trace test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/trace.zip
2026-05-16T06:19:45.3636643Z 
2026-05-16T06:19:45.3637218Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3637676Z 
2026-05-16T06:19:45.3638251Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3638721Z 
2026-05-16T06:19:45.3639403Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3640066Z 
2026-05-16T06:19:45.3640261Z     Expected: > [32m470[39m
2026-05-16T06:19:45.3640685Z     Received:   [31m440[39m
2026-05-16T06:19:45.3640923Z 
2026-05-16T06:19:45.3641144Z       78 |       .getAttribute('data-x-coord');
2026-05-16T06:19:45.3641695Z       79 |     const afterX = Number(afterXStr ?? '0');
2026-05-16T06:19:45.3642757Z     > 80 |     expect(afterX).toBeGreaterThan(beforeX + 30); // ≥30 px movement; conservative.
2026-05-16T06:19:45.3643464Z          |                    ^
2026-05-16T06:19:45.3643814Z       81 |
2026-05-16T06:19:45.3644389Z       82 |     // (4) Chat round-trip. A presses Enter to focus chat, types, Enter to send.
2026-05-16T06:19:45.3645221Z       83 |     //     B sees a `.chat-line` matching `<sender>: <text>` within 5s.
2026-05-16T06:19:45.3646081Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08.e2e.test.ts:80:20
2026-05-16T06:19:45.3646774Z 
2026-05-16T06:19:45.3647425Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3648676Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3650008Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3650466Z 
2026-05-16T06:19:45.3651094Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3652541Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/test-failed-2.png
2026-05-16T06:19:45.3653894Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3654360Z 
2026-05-16T06:19:45.3655187Z     Error Context: test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/error-context.md
2026-05-16T06:19:45.3656055Z 
2026-05-16T06:19:45.3656889Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3658064Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/trace.zip
2026-05-16T06:19:45.3658882Z     Usage:
2026-05-16T06:19:45.3659043Z 
2026-05-16T06:19:45.3659911Z         pnpm exec playwright show-trace test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/trace.zip
2026-05-16T06:19:45.3660815Z 
2026-05-16T06:19:45.3661394Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3661991Z 
2026-05-16T06:19:45.3662974Z   11) [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) 
2026-05-16T06:19:45.3663804Z 
2026-05-16T06:19:45.3664380Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3664955Z 
2026-05-16T06:19:45.3665284Z     Locator: locator('form#login-form, #login-form, #username')
2026-05-16T06:19:45.3665825Z     Expected: visible
2026-05-16T06:19:45.3666164Z     Timeout: 5000ms
2026-05-16T06:19:45.3666536Z     Error: element(s) not found
2026-05-16T06:19:45.3666782Z 
2026-05-16T06:19:45.3666911Z     Call log:
2026-05-16T06:19:45.3667431Z     [2m  - Expect "toBeVisible" with timeout 5000ms[22m
2026-05-16T06:19:45.3668277Z     [2m  - waiting for locator('form#login-form, #login-form, #username')[22m
2026-05-16T06:19:45.3668752Z 
2026-05-16T06:19:45.3668760Z 
2026-05-16T06:19:45.3668887Z       36 |
2026-05-16T06:19:45.3669451Z       37 |     // Should navigate back to LoginScene (login form heading visible)
2026-05-16T06:19:45.3670402Z     > 38 |     await expect(page.locator('form#login-form, #login-form, #username')).toBeVisible({
2026-05-16T06:19:45.3671244Z          |                                                                           ^
2026-05-16T06:19:45.3672472Z       39 |       timeout: 5_000,
2026-05-16T06:19:45.3672856Z       40 |     });
2026-05-16T06:19:45.3673157Z       41 |
2026-05-16T06:19:45.3673753Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/logout.e2e.test.ts:38:75
2026-05-16T06:19:45.3674277Z 
2026-05-16T06:19:45.3674939Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3676146Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/test-failed-1.png
2026-05-16T06:19:45.3677445Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3677907Z 
2026-05-16T06:19:45.3678521Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3679639Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/video.webm
2026-05-16T06:19:45.3680873Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3681370Z 
2026-05-16T06:19:45.3682241Z     Error Context: test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/error-context.md
2026-05-16T06:19:45.3683041Z 
2026-05-16T06:19:45.3683694Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3684823Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/trace.zip
2026-05-16T06:19:45.3685606Z     Usage:
2026-05-16T06:19:45.3685774Z 
2026-05-16T06:19:45.3686590Z         pnpm exec playwright show-trace test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/trace.zip
2026-05-16T06:19:45.3687456Z 
2026-05-16T06:19:45.3688031Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3688489Z 
2026-05-16T06:19:45.3689062Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3689854Z 
2026-05-16T06:19:45.3690426Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3690949Z 
2026-05-16T06:19:45.3691267Z     Locator: locator('form#login-form, #login-form, #username')
2026-05-16T06:19:45.3692051Z     Expected: visible
2026-05-16T06:19:45.3692395Z     Timeout: 5000ms
2026-05-16T06:19:45.3692765Z     Error: element(s) not found
2026-05-16T06:19:45.3693010Z 
2026-05-16T06:19:45.3693143Z     Call log:
2026-05-16T06:19:45.3713654Z     [2m  - Expect "toBeVisible" with timeout 5000ms[22m
2026-05-16T06:19:45.3714638Z     [2m  - waiting for locator('form#login-form, #login-form, #username')[22m
2026-05-16T06:19:45.3715139Z 
2026-05-16T06:19:45.3715150Z 
2026-05-16T06:19:45.3715280Z       36 |
2026-05-16T06:19:45.3715838Z       37 |     // Should navigate back to LoginScene (login form heading visible)
2026-05-16T06:19:45.3717052Z     > 38 |     await expect(page.locator('form#login-form, #login-form, #username')).toBeVisible({
2026-05-16T06:19:45.3717931Z          |                                                                           ^
2026-05-16T06:19:45.3718482Z       39 |       timeout: 5_000,
2026-05-16T06:19:45.3718869Z       40 |     });
2026-05-16T06:19:45.3719179Z       41 |
2026-05-16T06:19:45.3719800Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/logout.e2e.test.ts:38:75
2026-05-16T06:19:45.3720333Z 
2026-05-16T06:19:45.3721024Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3722494Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3723883Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3724348Z 
2026-05-16T06:19:45.3724982Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3726220Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/video.webm
2026-05-16T06:19:45.3727531Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3727989Z 
2026-05-16T06:19:45.3728798Z     Error Context: test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/error-context.md
2026-05-16T06:19:45.3729657Z 
2026-05-16T06:19:45.3730297Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3731502Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/trace.zip
2026-05-16T06:19:45.3732611Z     Usage:
2026-05-16T06:19:45.3732782Z 
2026-05-16T06:19:45.3733685Z         pnpm exec playwright show-trace test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/trace.zip
2026-05-16T06:19:45.3734634Z 
2026-05-16T06:19:45.3735413Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3735878Z 
2026-05-16T06:19:45.3737208Z   12) [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop 
2026-05-16T06:19:45.3738276Z 
2026-05-16T06:19:45.3738898Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoMatch[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T06:19:45.3739467Z 
2026-05-16T06:19:45.3739808Z     Expected pattern: [32m/^0028-NaviRunR_\d{3}$/[39m
2026-05-16T06:19:45.3740482Z     Received string:  [31m"0000-NaviStandD_000"[39m
2026-05-16T06:19:45.3740832Z 
2026-05-16T06:19:45.3740958Z       32 |
2026-05-16T06:19:45.3741452Z       33 |     // Frame key must match Run R pattern: '0028-NaviRunR_NNN'
2026-05-16T06:19:45.3742346Z     > 34 |     expect(frameWhileRunning).toMatch(/^0028-NaviRunR_\d{3}$/);
2026-05-16T06:19:45.3743148Z          |                               ^
2026-05-16T06:19:45.3743538Z       35 |
2026-05-16T06:19:45.3743935Z       36 |     // Release right arrow and wait for stop
2026-05-16T06:19:45.3744503Z       37 |     await page.keyboard.up('ArrowRight');
2026-05-16T06:19:45.3745327Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/sprite-state.e2e.test.ts:34:31
2026-05-16T06:19:45.3745896Z 
2026-05-16T06:19:45.3746567Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3747783Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/test-failed-1.png
2026-05-16T06:19:45.3749090Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3749551Z 
2026-05-16T06:19:45.3750170Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3751317Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/video.webm
2026-05-16T06:19:45.3752852Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3753319Z 
2026-05-16T06:19:45.3754073Z     Error Context: test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/error-context.md
2026-05-16T06:19:45.3754891Z 
2026-05-16T06:19:45.3755540Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3756677Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/trace.zip
2026-05-16T06:19:45.3757465Z     Usage:
2026-05-16T06:19:45.3757630Z 
2026-05-16T06:19:45.3758471Z         pnpm exec playwright show-trace test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/trace.zip
2026-05-16T06:19:45.3759347Z 
2026-05-16T06:19:45.3759932Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3760593Z 
2026-05-16T06:19:45.3761179Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3761653Z 
2026-05-16T06:19:45.3762348Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3762885Z 
2026-05-16T06:19:45.3763147Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T06:19:45.3763642Z     Expected: visible
2026-05-16T06:19:45.3763984Z     Timeout: 15000ms
2026-05-16T06:19:45.3764364Z     Error: element(s) not found
2026-05-16T06:19:45.3764622Z 
2026-05-16T06:19:45.3764749Z     Call log:
2026-05-16T06:19:45.3765241Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T06:19:45.3765899Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T06:19:45.3766266Z 
2026-05-16T06:19:45.3766276Z 
2026-05-16T06:19:45.3766416Z        at fixtures.ts:172
2026-05-16T06:19:45.3766836Z 
2026-05-16T06:19:45.3766956Z       170 |  */
2026-05-16T06:19:45.3767530Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T06:19:45.3768475Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T06:19:45.3769255Z           |                                                                ^
2026-05-16T06:19:45.3769781Z       173 |     timeout: 15_000,
2026-05-16T06:19:45.3770156Z       174 |   });
2026-05-16T06:19:45.3770460Z       175 | }
2026-05-16T06:19:45.3771171Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T06:19:45.3772828Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/sprite-state.e2e.test.ts:22:11
2026-05-16T06:19:45.3773430Z 
2026-05-16T06:19:45.3774146Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3775438Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/test-failed-1.png
2026-05-16T06:19:45.3776842Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3777359Z 
2026-05-16T06:19:45.3778107Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3779329Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/video.webm
2026-05-16T06:19:45.3780672Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3781142Z 
2026-05-16T06:19:45.3782091Z     Error Context: test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/error-context.md
2026-05-16T06:19:45.3783026Z 
2026-05-16T06:19:45.3783794Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3785083Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/trace.zip
2026-05-16T06:19:45.3786196Z     Usage:
2026-05-16T06:19:45.3786373Z 
2026-05-16T06:19:45.3787295Z         pnpm exec playwright show-trace test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/trace.zip
2026-05-16T06:19:45.3788275Z 
2026-05-16T06:19:45.3788960Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3789463Z 
2026-05-16T06:19:45.3790382Z   13) [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block west wall (D-62 anti-revert) 
2026-05-16T06:19:45.3791149Z 
2026-05-16T06:19:45.3791976Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3792528Z 
2026-05-16T06:19:45.3792806Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T06:19:45.3793302Z     Expected: visible
2026-05-16T06:19:45.3793924Z     Timeout: 15000ms
2026-05-16T06:19:45.3794428Z     Error: element(s) not found
2026-05-16T06:19:45.3794708Z 
2026-05-16T06:19:45.3794851Z     Call log:
2026-05-16T06:19:45.3795426Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T06:19:45.3796237Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T06:19:45.3796659Z 
2026-05-16T06:19:45.3796668Z 
2026-05-16T06:19:45.3796822Z        at fixtures.ts:172
2026-05-16T06:19:45.3797050Z 
2026-05-16T06:19:45.3797179Z       170 |  */
2026-05-16T06:19:45.3797764Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T06:19:45.3798686Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T06:19:45.3799586Z           |                                                                ^
2026-05-16T06:19:45.3800177Z       173 |     timeout: 15_000,
2026-05-16T06:19:45.3800588Z       174 |   });
2026-05-16T06:19:45.3800939Z       175 | }
2026-05-16T06:19:45.3801658Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T06:19:45.3803134Z         at loginAndAssertTiles (/home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-collision-boundary.spec.ts:38:9)
2026-05-16T06:19:45.3804453Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-collision-boundary.spec.ts:137:5
2026-05-16T06:19:45.3805177Z 
2026-05-16T06:19:45.3805882Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3807130Z     test-results/cli-08-collision-boundary--e77e6-west-wall-D-62-anti-revert--chromium/test-failed-1.png
2026-05-16T06:19:45.3808438Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3808891Z 
2026-05-16T06:19:45.3809525Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3810821Z     test-results/cli-08-collision-boundary--e77e6-west-wall-D-62-anti-revert--chromium/video.webm
2026-05-16T06:19:45.3812596Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3813066Z 
2026-05-16T06:19:45.3813836Z     Error Context: test-results/cli-08-collision-boundary--e77e6-west-wall-D-62-anti-revert--chromium/error-context.md
2026-05-16T06:19:45.3814656Z 
2026-05-16T06:19:45.3815323Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3816636Z     test-results/cli-08-collision-boundary--e77e6-west-wall-D-62-anti-revert--chromium/trace.zip
2026-05-16T06:19:45.3817444Z     Usage:
2026-05-16T06:19:45.3817629Z 
2026-05-16T06:19:45.3818462Z         pnpm exec playwright show-trace test-results/cli-08-collision-boundary--e77e6-west-wall-D-62-anti-revert--chromium/trace.zip
2026-05-16T06:19:45.3819358Z 
2026-05-16T06:19:45.3819954Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3820612Z 
2026-05-16T06:19:45.3821965Z   14) [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) 
2026-05-16T06:19:45.3822889Z 
2026-05-16T06:19:45.3823510Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3823981Z 
2026-05-16T06:19:45.3824216Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T06:19:45.3824648Z     Expected: visible
2026-05-16T06:19:45.3824958Z     Timeout: 15000ms
2026-05-16T06:19:45.3825315Z     Error: element(s) not found
2026-05-16T06:19:45.3825563Z 
2026-05-16T06:19:45.3825677Z     Call log:
2026-05-16T06:19:45.3826223Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T06:19:45.3826991Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T06:19:45.3827362Z 
2026-05-16T06:19:45.3827390Z 
2026-05-16T06:19:45.3832405Z        at fixtures.ts:172
2026-05-16T06:19:45.3832657Z 
2026-05-16T06:19:45.3832776Z       170 |  */
2026-05-16T06:19:45.3833282Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T06:19:45.3834195Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T06:19:45.3834928Z           |                                                                ^
2026-05-16T06:19:45.3835433Z       173 |     timeout: 15_000,
2026-05-16T06:19:45.3835792Z       174 |   });
2026-05-16T06:19:45.3836096Z       175 | }
2026-05-16T06:19:45.3836815Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T06:19:45.3837929Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-direction-convergence.spec.ts:96:11
2026-05-16T06:19:45.3838537Z 
2026-05-16T06:19:45.3839231Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3841511Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/test-failed-1.png
2026-05-16T06:19:45.3842996Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3843412Z 
2026-05-16T06:19:45.3844070Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3845272Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/test-failed-2.png
2026-05-16T06:19:45.3846542Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3847001Z 
2026-05-16T06:19:45.3847734Z     Error Context: test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/error-context.md
2026-05-16T06:19:45.3848511Z 
2026-05-16T06:19:45.3849077Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3850323Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/trace.zip
2026-05-16T06:19:45.3851070Z     Usage:
2026-05-16T06:19:45.3851224Z 
2026-05-16T06:19:45.3852128Z         pnpm exec playwright show-trace test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/trace.zip
2026-05-16T06:19:45.3852965Z 
2026-05-16T06:19:45.3853577Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3854042Z 
2026-05-16T06:19:45.3854783Z   15) [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall 
2026-05-16T06:19:45.3855417Z 
2026-05-16T06:19:45.3855978Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T06:19:45.3856507Z 
2026-05-16T06:19:45.3856759Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T06:19:45.3857260Z     Expected: visible
2026-05-16T06:19:45.3857884Z     Timeout: 15000ms
2026-05-16T06:19:45.3858265Z     Error: element(s) not found
2026-05-16T06:19:45.3858518Z 
2026-05-16T06:19:45.3858646Z     Call log:
2026-05-16T06:19:45.3859184Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T06:19:45.3859974Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T06:19:45.3860416Z 
2026-05-16T06:19:45.3860425Z 
2026-05-16T06:19:45.3860578Z        at fixtures.ts:172
2026-05-16T06:19:45.3860802Z 
2026-05-16T06:19:45.3860933Z       170 |  */
2026-05-16T06:19:45.3861506Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T06:19:45.3862809Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T06:19:45.3863513Z           |                                                                ^
2026-05-16T06:19:45.3864035Z       173 |     timeout: 15_000,
2026-05-16T06:19:45.3864405Z       174 |   });
2026-05-16T06:19:45.3864743Z       175 | }
2026-05-16T06:19:45.3865767Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T06:19:45.3867129Z         at loginAndAssertTiles (/home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-floor-collision.e2e.test.ts:24:9)
2026-05-16T06:19:45.3868361Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-floor-collision.e2e.test.ts:119:5
2026-05-16T06:19:45.3868946Z 
2026-05-16T06:19:45.3869583Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T06:19:45.3870689Z     test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/test-failed-1.png
2026-05-16T06:19:45.3872101Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3872541Z 
2026-05-16T06:19:45.3873130Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3874199Z     test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/video.webm
2026-05-16T06:19:45.3875331Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3875742Z 
2026-05-16T06:19:45.3876415Z     Error Context: test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/error-context.md
2026-05-16T06:19:45.3877137Z 
2026-05-16T06:19:45.3877731Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T06:19:45.3878759Z     test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/trace.zip
2026-05-16T06:19:45.3879478Z     Usage:
2026-05-16T06:19:45.3879642Z 
2026-05-16T06:19:45.3880403Z         pnpm exec playwright show-trace test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/trace.zip
2026-05-16T06:19:45.3881191Z 
2026-05-16T06:19:45.3902162Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T06:19:45.3902745Z 
2026-05-16T06:19:45.3902899Z   12 failed
2026-05-16T06:19:45.3904065Z     [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) 
2026-05-16T06:19:45.3905908Z     [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) 
2026-05-16T06:19:45.3907732Z     [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) 
2026-05-16T06:19:45.3909681Z     [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:19:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene 
2026-05-16T06:19:45.3911524Z     [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) 
2026-05-16T06:19:45.3914318Z     [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works 
2026-05-16T06:19:45.3916537Z     [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) 
2026-05-16T06:19:45.3918634Z     [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) 
2026-05-16T06:19:45.3920656Z     [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) 
2026-05-16T06:19:45.3942723Z     [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace 
2026-05-16T06:19:45.3944484Z     [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) 
2026-05-16T06:19:45.3946513Z     [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop 
2026-05-16T06:19:45.3947641Z   3 flaky
2026-05-16T06:19:45.3948632Z     [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block west wall (D-62 anti-revert) 
2026-05-16T06:19:45.3950390Z     [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) 
2026-05-16T06:19:45.3952053Z     [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall 
2026-05-16T06:19:45.3952831Z   22 passed (12.4m)
2026-05-16T06:19:45.9812392Z /home/runner/work/rebno/rebno/apps/client:
2026-05-16T06:19:45.9814624Z  ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  @rebno/client@0.1.0 test:e2e: `playwright test`
2026-05-16T06:19:45.9815523Z Exit status 1
2026-05-16T06:19:46.0016742Z ##[error]Process completed with exit code 1.
